// Problem 032: Pandigital products
// We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.
// The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.
// Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
// HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.

package main

import (
	"fmt"
	"projecteuler/euler"
	"strconv"
)

func p032() {
	ans := 0
	for p := 1234; p < 9877; p++ {
		if euler.IsPrime(p) || !euler.IsUniqueDigits(strconv.Itoa(p*10)) {
			continue
		}
		if check032(p) {
			ans += p
		}
	}
	fmt.Println("Problem 032:", ans)
}

func check032(p int) bool {
	ans := false
	for x := 2; x < 10; x++ {
		if p%x == 0 {
			str := strconv.Itoa(1000000*(p/x) + p*100 + x)
			if len(str) == 10 {
				ans = ans || euler.IsUniqueDigits(str)
			}
		}
	}
	for x := 12; x*x < p; x++ {
		if p%x == 0 {
			str := strconv.Itoa(10000000*(p/x) + p*1000 + x)
			if len(str) == 10 {
				ans = ans || euler.IsUniqueDigits(str)
			}
		}
	}
	return ans
}
